Nuotolinio darbo įtaka darbuotojų psichologinei gerovei

baigiamajam

Hipotezė

Analizei buvo pasirinktas duomenų rinkinys „Remote Work & Mental Health“. Pagrindinė šio tyrimo hipotezė yra tokia: nuotolinis darbas turi neigiamą poveikį darbuotojų streso lygiui ir psichinei sveikatai. Taigi šios analizės tikslas yra įvertinti, ar nuotolinio darbo sąlygos daro neigiamą poveikį darbuotojų psichinei sveikatai ir bendram pasitenkinimui darbu.

Vertinimo kriterijai, pagal kuriuos matuosime hipotezės patvirtinimą ar paneigimą:

  • Streso lygis: Bus tiriama, ar darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei dirbantys vietoje ar hibridiniu būdu.
  • Socialinė izoliacija: Vertinsime, kiek nuotolinis darbas veikia socialinės izoliacijos jausmą ir kokį ryšį tai turi su darbuotojų pasitenkinimu.
  • Psichinės sveikatos sutrikimai: Bus analizuojama, ar dirbant nuotoliniu būdu dažniau pasireiškia tokie sutrikimai kaip nerimas ar depresija.
  • Pasitenkinimas darbu: Nustatysime, ar darbo sąlygos (nuotolinis, hibridinis, vietinis) lemia skirtumus pasitenkinimo darbu lygyje.
  • Prieiga prie psichinės sveikatos išteklių: Bus tiriama, ar prieiga prie psichinės sveikatos pagalbos paslaugų turi reikšmingos įtakos nuotoliniu būdu dirbančių darbuotojų psichinei būklei.

Jeigu analizės metu bus nustatyta, kad nuotolinis darbas didina darbuotojų streso lygį, socialinę izoliaciją ir turi neigiamą įtaką psichinei sveikatai, hipotezė bus patvirtinta. Tačiau jei duomenys rodys, kad tam tikromis sąlygomis nuotolinis darbas neturi neigiamų pasekmių arba net turi teigiamą poveikį, pagrindinė hipotezė bus paneigta.

Duomenų paėmimas iš CSV

In [310]:
import pandas as pd
In [312]:
df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/Impact_of_Remote_Work_on_Mental_Health.csv')

Pradinis duomenų apdorojimas

In [314]:
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

Duomenų peržiūra

In [656]:
print(df.info())
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 27 columns):
 #   Column                                 Non-Null Count  Dtype 
---  ------                                 --------------  ----- 
 0   Employee_ID                            5000 non-null   object
 1   Age                                    5000 non-null   int64 
 2   Gender                                 5000 non-null   object
 3   Job_Role                               5000 non-null   object
 4   Industry                               5000 non-null   object
 5   Years_of_Experience                    5000 non-null   int64 
 6   Hours_Worked_Per_Week                  5000 non-null   int64 
 7   Number_of_Virtual_Meetings             5000 non-null   int64 
 8   Work_Life_Balance_Rating               5000 non-null   int64 
 9   Stress_Level                           5000 non-null   object
 10  Mental_Health_Condition                5000 non-null   object
 11  Productivity_Change                    5000 non-null   object
 12  Social_Isolation_Rating                5000 non-null   int64 
 13  Satisfaction_with_Remote_Work          5000 non-null   object
 14  Physical_Activity                      5000 non-null   object
 15  Sleep_Quality                          5000 non-null   object
 16  Region                                 5000 non-null   object
 17  Stress_Level_Numeric                   5000 non-null   int64 
 18  Mental_Health_Access                   5000 non-null   int64 
 19  Work_Location_Onsite                   5000 non-null   bool  
 20  Work_Location_Remote                   5000 non-null   bool  
 21  Access_to_Mental_Health_Resources_Yes  5000 non-null   bool  
 22  Company_Support_for_Remote_Work_2      5000 non-null   bool  
 23  Company_Support_for_Remote_Work_3      5000 non-null   bool  
 24  Company_Support_for_Remote_Work_4      5000 non-null   bool  
 25  Company_Support_for_Remote_Work_5      5000 non-null   bool  
 26  Work_Location                          5000 non-null   object
dtypes: bool(7), int64(8), object(12)
memory usage: 815.6+ KB
None

Tikriname trūkstamas reikšmes

In [279]:
#df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/Impact_of_Remote_Work_on_Mental_Health.csv')
print(df.isnull().sum())
Employee_ID                             0
Age                                     0
Gender                                  0
Job_Role                                0
Industry                                0
Years_of_Experience                     0
Work_Location                           0
Hours_Worked_Per_Week                   0
Number_of_Virtual_Meetings              0
Work_Life_Balance_Rating                0
Stress_Level                            0
Mental_Health_Condition              1196
Access_to_Mental_Health_Resources       0
Productivity_Change                     0
Social_Isolation_Rating                 0
Satisfaction_with_Remote_Work           0
Company_Support_for_Remote_Work         0
Physical_Activity                    1629
Sleep_Quality                           0
Region                                  0
dtype: int64

Užpildome trūkstamas reikšmes

In [660]:
df.loc[df['Mental_Health_Condition'].isnull(), 'Mental_Health_Condition'] = 'Unknown'
df.loc[df['Physical_Activity'].isnull(), 'Physical_Activity'] = 'No Activity'

Patikriname trūkstamas reikšmes dar kartą

In [322]:
print(df.isnull().sum())
Employee_ID                          0
Age                                  0
Gender                               0
Job_Role                             0
Industry                             0
Years_of_Experience                  0
Work_Location                        0
Hours_Worked_Per_Week                0
Number_of_Virtual_Meetings           0
Work_Life_Balance_Rating             0
Stress_Level                         0
Mental_Health_Condition              0
Access_to_Mental_Health_Resources    0
Productivity_Change                  0
Social_Isolation_Rating              0
Satisfaction_with_Remote_Work        0
Company_Support_for_Remote_Work      0
Physical_Activity                    0
Sleep_Quality                        0
Region                               0
dtype: int64

Naujų stulpelių kūrimas

In [664]:
stress_map = {'Low': 1, 'Medium': 2, 'High': 3}
df['Stress_Level_Numeric'] = df['Stress_Level'].map(stress_map)

Kuriame skaitinį atitikmenį prieigos prie psichinės sveikatos išteklių

In [677]:
#df['Mental_Health_Access'] = df['Access_to_Mental_Health_Resources'].map({'Yes': 1, 'No': 0})
cleaned_df['Mental_Health_Access'] = cleaned_df['Access_to_Mental_Health_Resources_Yes'].map({True: 1, False: 0})
print(cleaned_df[['Access_to_Mental_Health_Resources_Yes', 'Access_to_Mental_Health_Resources_No', 'Mental_Health_Access']].head())
   Access_to_Mental_Health_Resources_Yes  \
0                                  False   
1                                  False   
2                                  False   
3                                   True   
4                                   True   

   Access_to_Mental_Health_Resources_No  Mental_Health_Access  
0                                  True                     0  
1                                  True                     0  
2                                  True                     0  
3                                 False                     1  
4                                 False                     1  

Išsaugome paruoštus duomenis naujame faile

In [328]:
df.to_csv('naujas_remote_work_mental_health.csv', index=False)

Sukuriame DataFrame su apdorotais duomenimis

In [330]:
cleaned_df = pd.DataFrame(df)

Apdorotų duomenų peržiūra

In [332]:
cleaned_df.head()
Out[332]:
Employee_ID Age Gender Job_Role Industry Years_of_Experience Work_Location Hours_Worked_Per_Week Number_of_Virtual_Meetings Work_Life_Balance_Rating ... Access_to_Mental_Health_Resources Productivity_Change Social_Isolation_Rating Satisfaction_with_Remote_Work Company_Support_for_Remote_Work Physical_Activity Sleep_Quality Region Stress_Level_Numeric Mental_Health_Access
0 EMP0001 32 Non-binary HR Healthcare 13 Hybrid 47 7 2 ... No Decrease 1 Unsatisfied 1 Weekly Good Europe 2 0
1 EMP0002 40 Female Data Scientist IT 3 Remote 52 4 1 ... No Increase 3 Satisfied 2 Weekly Good Asia 2 0
2 EMP0003 59 Non-binary Software Engineer Education 22 Hybrid 46 11 5 ... No No Change 4 Unsatisfied 5 No Activity Poor North America 2 0
3 EMP0004 27 Male Software Engineer Finance 20 Onsite 32 8 4 ... Yes Increase 3 Unsatisfied 3 No Activity Poor Europe 3 1
4 EMP0005 49 Male Sales Consulting 32 Onsite 35 12 2 ... Yes Decrease 3 Unsatisfied 3 Weekly Average North America 3 1

5 rows × 22 columns

Sutvarkius duomenis ir sukūrus vientisą bei tvarkingą lentelę, dabar turime galimybę analizuoti kiekvieną iškeltos hipotezės punkto aspektą. Toliau pereisime prie išsamios analizės, nagrinėdami kiekvieną hipotezės punktą iš eilės.

1. Kaip nuotolinis darbas veikia darbuotojų streso lygį?

Šioje analizėje bus tiriama, ar darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei dirbantys vietoje ar hibridiniu būdu. Analizės metu bus naudojami duomenys iš paruoštos lentelės.

  1. Grupavimas pagal darbo vietą.

Duomenys yra suskirstomi pagal darbo vietą, siekiant apskaičiuoti vidutinį streso lygį kiekvienoje grupėje

In [232]:
cleaned_df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/naujas_remote_work_mental_health.csv')

work_locations = cleaned_df['Work_Location'].unique()
average_stress_levels = []

for location in work_locations:
    avg_stress = cleaned_df[cleaned_df['Work_Location'] == location]['Stress_Level_Numeric'].mean()
    average_stress_levels.append((location, avg_stress))

stress_analysis = pd.DataFrame(average_stress_levels, columns=['Work_Location', 'Vidutinis_Streso_Lygis'])
print(stress_analysis)
  Work_Location  Vidutinis_Streso_Lygis
0        Hybrid                2.010916
1        Remote                2.025088
2        Onsite                1.987783
  1. Streso lygio vizualizacija pagal darbo vietą.

Siekiant pavaizduoti skirtumus tarp darbo vietų, buvo sudaryta linijinė diagrama

In [456]:
sns.set(style="whitegrid")

plt.figure(figsize=(5, 2))
sns.lineplot(data=stress_analysis, x='Work_Location', y='Vidutinis_Streso_Lygis', marker='o')
plt.title('Vidutinis streso lygis pagal darbo vietą')
plt.xlabel('')
plt.ylabel('Streso rodiklis')
plt.xticks(rotation=45)
plt.grid()
plt.show()
No description has been provided for this image
  1. Streso lygio pasiskirstymas.

Pateikiamas kiekvienos streso lygio kategorijos pasiskirstymas pagal darbo vietą

In [242]:
stress_distribution = df.groupby(['Work_Location', 'Stress_Level']).size().unstack().fillna(0)

df = pd.read_csv('C:/Users/myamo/OneDrive/Desktop/naujas_remote_work_mental_health.csv')

work_locations = df['Work_Location'].unique()
stress_levels = df['Stress_Level'].unique()

stress_distribution = []

for location in work_locations:
    stress_count = []
    for level in stress_levels:
        count = df[(df['Work_Location'] == location) & (df['Stress_Level'] == level)].shape[0]
        stress_count.append(count)
    stress_distribution.append([location] + stress_count)

stress_distribution_df = pd.DataFrame(stress_distribution, columns=['Work_Location'] + list(stress_levels))
stress_distribution_df.set_index('Work_Location', inplace=True)

print(stress_distribution_df)

print(stress_distribution)
               Medium  High  Low
Work_Location                   
Hybrid            545   561  543
Remote            577   590  547
Onsite            547   535  555
[['Hybrid', 545, 561, 543], ['Remote', 577, 590, 547], ['Onsite', 547, 535, 555]]
  1. Streso lygio pasiskirstymas.

Pateikiamas skirtingos streso lygio kategorijų pasiskirstymas tarp darbuotojų.

In [499]:
numerical_columns = ['Stress_Level_Numeric', 'Work_Life_Balance_Rating', 'Social_Isolation_Rating']
correlation_matrix = df[numerical_columns].corr()
plt.figure(figsize=(4, 1))

sns.heatmap(correlation_matrix, annot=True, cmap="coolwarm")
plt.title("Koreliacija tarp streso lygio ir kitų veiksnių")
plt.show()
No description has been provided for this image
  1. Streso lygio ir psichinės sveikatos išteklių prieinamumo pagal darbo vietą analizė.

Įvertinamas streso lygis pagal darbo vietą, atsižvelgiant į psichinės sveikatos išteklių prieinamumą

In [515]:
stress_support_analysis = df.groupby(['Work_Location', 'Access_to_Mental_Health_Resources_Yes'])['Stress_Level_Numeric'].mean().unstack()
print(stress_support_analysis)
Access_to_Mental_Health_Resources_Yes     False     True 
Work_Location                                            
Hybrid                                 1.984468  2.038177
Onsite                                 1.953659  2.022032
Remote                                 1.997768  2.055012

Išvada N1:

Analizės rezultatai parodė, kad darbuotojai, dirbantys nuotoliniu būdu, patiria didesnį streso lygį nei tie, kurie dirba vietoje arba hibridiniu būdu.

Pirmoji hipotezė pasitvirtino.

2. Kaip nuotolinis darbas veikia socialinės izoliacijos jausmą ir kokią įtaką tai daro darbuotojų pasitenkinimui darbu?

  1. Suformuojamas duomenų rinkinys
In [593]:
combined_analysis = analysis_df[['Work_Location', 'Social_Isolation_Rating', 'Satisfaction_with_Remote_Work']]

print(combined_analysis.head())
  Work_Location  Social_Isolation_Rating Satisfaction_with_Remote_Work
0        Hybrid                        1                   Unsatisfied
1        Remote                        3                     Satisfied
2        Hybrid                        4                   Unsatisfied
3        Onsite                        3                   Unsatisfied
4        Onsite                        3                   Unsatisfied
  1. Bendras pasitenkinimo ir socialinės izoliacijos analizė
In [580]:
overall_satisfaction_analysis = combined_analysis.groupby('Satisfaction_with_Remote_Work').agg({
    'Social_Isolation_Rating': 'mean',
    'Work_Location': 'count'
}).rename(columns={'Work_Location': 'Employee_Count'}).reset_index()

print(overall_satisfaction_analysis)
  Satisfaction_with_Remote_Work  Social_Isolation_Rating  Employee_Count
0                       Neutral                 3.044903            1648
1                     Satisfied                 2.968955            1675
2                   Unsatisfied                 2.968396            1677

Išvada N2:

Socialinės izoliacijos reitingai skiriasi pagal pasitenkinimo nuotoliniu darbu lygius. Darbuotojų pasitenkinimas ir socialinė izoliacija yra tarpusavyje susiję, todėl organizacijos turėtų atkreipti dėmesį į šiuos veiksnius, siekdamos gerinti darbuotojų gerovę. Tokiu būdu, hipotezė, kad nuotolinis darbas veikia socialinės izoliacijos jausmą ir darbuotojų pasitenkinimą, gavo patvirtinimą.

3. Ar nuotolinis darbas dažniau susijęs su nerimu ar depresija nei hibridinis ar vietinis darbas?

Įkėlus duomenis ir gauname unikalias psichinės sveikatos būkles

In [688]:
data = pd.read_csv('C:\\Users\\myamo\\OneDrive\\Desktop\\naujas_remote_work_mental_health.csv')

unique_conditions = data['Mental_Health_Condition'].unique()
print(unique_conditions)
['Depression' 'Anxiety' 'Unknown' 'Burnout']

Suskaičiuojame psichinės sveikatos sutrikimų pasiskirstymą pagal darbo vietą

In [258]:
def calculate_mental_health_distribution(df, location_col, condition_col):
    work_locations = df[location_col].unique()
    mental_health_conditions = df[condition_col].unique()

    mh_combination_count = []

    for location in work_locations:
        for condition in mental_health_conditions:
            count = df[(df[location_col] == location) & (df[condition_col] == condition)].shape[0]
            mh_combination_count.append((location, condition, count))

    return pd.DataFrame(mh_combination_count, columns=[location_col, condition_col, 'Count'])

# Naudoti funkciją
mental_health_distribution_df = calculate_mental_health_distribution(df, 'Work_Location', 'Mental_Health_Condition')
print(mental_health_distribution_df)
   Work_Location Mental_Health_Condition  Count
0         Hybrid              Depression    421
1         Hybrid                 Anxiety    428
2         Hybrid                 Unknown    400
3         Hybrid                 Burnout    400
4         Remote              Depression    413
5         Remote                 Anxiety    443
6         Remote                 Unknown    420
7         Remote                 Burnout    438
8         Onsite              Depression    412
9         Onsite                 Anxiety    407
10        Onsite                 Unknown    376
11        Onsite                 Burnout    442

Pateikiame vizualizaciją, kuri rodo psichinės sveikatos sutrikimų procentinę dalį pagal darbo vietą

In [709]:
plt.figure(figsize=(10, 6))
for condition in mental_health_percentage.columns:
    plt.plot(mental_health_percentage.index, mental_health_percentage[condition], marker='o', label=condition)

plt.title('Psichinės sveikatos sutrikimų procentas pagal darbo vietą')
plt.xlabel('')
plt.ylabel('%')
plt.xticks(rotation=0)
plt.legend(title='Psichinės sveikatos sutrikimas')
plt.show()
No description has been provided for this image

Išvada N3:

Iš gautų rezultatų matyti, kad nuotoliniu būdu dirbantys darbuotojai patiria panašius psichinės sveikatos sutrikimus kaip ir hibridiniai bei vietiniai darbuotojai. Nors nuotolinis darbas gali turėti įtakos psichinei būklei, skirtumai tarp darbo modelių nebuvo pakankamai reikšmingi, todėl hipotezė, kad dirbant nuotoliniu būdu dažniau pasireiškia tokie sutrikimai kaip nerimas ar depresija, nepasitvirtino.

Taip pat pastebima, kad dirbantys vietoje (onsite) patiria didžiausią išsekimą.

4. Ar darbo sąlygos (nuotolinis, hibridinis, vietinis) turi įtakos darbuotojų pasitenkinimo lygiui?

  1. Apskaičiuojami pasitenkinimo procentai pagal darbo vietą.
In [802]:
satisfaction_summary = satisfaction_data.groupby('Work_Location')['Satisfaction_with_Remote_Work'].value_counts(normalize=True).unstack()
from IPython.display import display, HTML
display(HTML(satisfaction_summary.to_html()))
Satisfaction_with_Remote_Work Neutral Satisfied Unsatisfied
Work_Location
Hybrid 0.326865 0.342025 0.331110
Onsite 0.309102 0.361637 0.329261
Remote 0.351809 0.302800 0.345391
  1. Atliktas Chi-kvadrato testas, siekiant įvertinti pasitenkinimo skirtumus tarp skirtingų darbo sąlygų.
In [818]:
chi2, p, dof, expected = chi2_contingency(contingency_table)

print(f"Chi-kvadrato testas: p-vertė = {p}")
Chi-kvadrato testas: p-vertė = 0.9999907578823934

Chi-kvadrato testas parodė didelę p-vertę (0.9999), todėl galime teigti, kad statistiškai reikšmingo skirtumo tarp pasitenkinimo lygių įvairiose darbo sąlygose nėra.

  1. Pasitenkinimas darbu pagal darbo vietą, atvaizduotas stulpelinėje diagramoje.
In [812]:
satisfaction_summary.plot(kind='bar', figsize=(12, 6), position=0, width=0.8)
plt.title('Pasitenkinimas darbu pagal darbo vietą')
plt.xlabel('')
plt.ylabel('%')
plt.xticks(rotation=0)
plt.legend(title='Pasitenkinimo lygis', bbox_to_anchor=(1.05, 1), loc='upper left')
plt.tight_layout()
plt.show()
No description has been provided for this image

Išvada N4:

Apibendrinant, darbo sąlygos turi įtakos darbuotojų pasitenkinimo lygiui, tačiau skirtumai tarp modelių nėra dideli. Onsite darbo modelis pasižymi didesniu patenkintų darbuotojų procentu, o nuotolinis darbas rodo didesnį neutralumą. Hipotezė, kad darbo sąlygos (nuotolinis, hibridinis, vietinis) turi įtakos darbuotojų pasitenkinimo lygiui nepasitvirtino.

5. Ar prieiga prie psichinės sveikatos pagalbos paslaugų sumažina nuotoliniu būdu dirbančių darbuotojų psichinės sveikatos sutrikimų, tokių kaip nerimas, depresija ar perdegimas, dažnį?

Filtruojami duomenys, kad būtų gauta tik nuotoliniu būdu dirbančių darbuotojų psichinės sveikatos būklė ir prieiga prie psichinės sveikatos išteklių

In [859]:
remote_data = data[data['Work_Location'] == 'Remote']

mental_health_data = remote_data[['Mental_Health_Condition', 'Access_to_Mental_Health_Resources']]

mental_health_data.head()
Out[859]:
Mental_Health_Condition Access_to_Mental_Health_Resources
1 Anxiety No
6 Anxiety Yes
10 Unknown Yes
12 Depression Yes
14 Anxiety Yes

Sukurta lentelė, kurioje matoma psichinės sveikatos būklės pasiskirstymas pagal prieigą prie psichinės sveikatos išteklių

In [33]:
import pandas as pd
mental_health_data = pd.read_csv(r'C:\Users\myamo\OneDrive\Desktop\naujas_remote_work_mental_health.csv')
summary_data = mental_health_data.groupby(['Access_to_Mental_Health_Resources', 'Mental_Health_Condition']).size().unstack(fill_value=0)

percentage_summary = summary_data.div(summary_data.sum(axis=1), axis=0) * 100
print(percentage_summary)
Mental_Health_Condition              Anxiety    Burnout  Depression    Unknown
Access_to_Mental_Health_Resources                                             
No                                 25.303564  26.047787   24.050137  24.598512
Yes                                25.827544  25.132816   25.827544  23.212096

Išvada N5:

Nors prieiga prie psichinės sveikatos išteklių gali turėti tam tikrą teigiamą poveikį, vis dėlto ji nevisiškai sumažina psichinės sveikatos sutrikimų dažnį tarp nuotoliniu būdu dirbančių asmenų. Todėl hipotezė, kad nuotolinis darbas dažniau susijęs su nerimu ar depresija, nepasitvirtino.

Galutinė išvada:

Apibendrinant analizę, nuotolinis darbas turi įtakos darbuotojų streso lygiui ir socialinei izoliacijai, tačiau psichinės sveikatos sutrikimai, tokie kaip nerimas ir depresija, nebuvo dažnesni nei kitose darbo sąlygose. Nors nuotolinis darbas nepadidino psichinių sveikatos problemų, pastebėta, kad dirbantieji vietoje patyrė didžiausią perdegimo lygį. Prieiga prie psichinės sveikatos pagalbos paslaugų nevisiškai sumažino psichinės sveikatos sutrikimų dažnį tarp nuotoliniu būdu dirbančių darbuotojų. Pagrindinė hipotezė, kad nuotolinis darbas turi neigiamą poveikį darbuotojų streso lygiui ir psichinei sveikatai nepasitvirtino.
In [ ]: